package com.demo.java.OD51_100.OD68;

import java.util.LinkedList;
import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【最小的调整次数 特异性双端队列】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145613006
 */
public class OdMain {
    public static void main(String[] args) {
        try {
            Scanner s = new Scanner(System.in);
            int n = Integer.parseInt(s.nextLine()); // 获取操作数量
            String[] commands = new String[n * 2]; // 每个命令占一行
            for (int i = 0; i < commands.length; ++i) {
                commands[i] = s.nextLine(); // 读取命令
            }

            int count = 0; // 记录排序次数
            int input = 0; // 用来生成插入的数值
            int output = 0; // 用来记录移除的数值
            LinkedList<Integer> linkedList = new LinkedList<>(); // 双端队列

            for (String command : commands) {
                char c = command.charAt(0); // 读取命令的首字母
                switch (c) {
                    case 'h': // head add
                        linkedList.addFirst(++input); // 从头部添加元素
                        break;
                    case 't': // tail add
                        linkedList.addLast(++input); // 从尾部添加元素
                        break;
                    default: // remove
                        // 执行移除操作，检查最小值是否变化
                        if (!linkedList.getFirst().equals(++output)) {
                            count++; // 需要排序
                            linkedList.sort(Integer::compareTo); // 排序
                        }
                        linkedList.removeFirst(); // 从头部移除元素
                        break;
                }
            }
            System.out.print(count); // 输出排序次数
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("input error");
        }
    }
}